package it.uniroma2.sd.clienttools;

import java.util.HashMap;

public class Parser
{
    // L'indice del comando, adesso in posizione 0 ovvero: createTable(tabella1)
    private int commandIndex = 0;
    // Lista dei caratteri usati come delimitatori di parole
    private String delimiter = "[();]";
    private String[] tokens = null;

    private HashMap<String, String> functionsDB = new HashMap<String, String>();

    public Parser()
    {
	this.functionsDB.put("createTable", "createTable");
	this.functionsDB.put("createDB", "createDB");
	this.functionsDB.put("deleteColumnFromTable", "deleteColumnFromTable");
	this.functionsDB.put("deleteColumnsFromTable", "deleteColumnsFromTable");
	this.functionsDB.put("deleteRowFromTable", "deleteRowFromTable");
	this.functionsDB.put("deleteTable", "deleteTable");
	this.functionsDB.put("getAllColumnFromTable", "getAllColumnFromTable");
	this.functionsDB.put("getColumnFromTable", "getColumnFromTable");
	this.functionsDB.put("putInTable", "putInTable");
	this.functionsDB.put("putsInTable", "putsInTable");

    }

    public int compare()
    {

	if ((this.tokens.length != 0) && (this.functionsDB.containsKey(this.tokens[commandIndex])))
	{
	    System.out.println("Operazione riconosciuta!");
	    return 0;
	}
	else
	{
	    System.out.println("Operazione NON riconosciuta!");
	    return -1;
	}

    }

    public String[] parse(String instruction)
    {

	if (instruction == null || instruction == "")
	{
	    return null;
	}
	else
	{
	    int ret = -1;

	    this.tokens = instruction.split(delimiter);

	    char magic = instruction.charAt(0);
	    switch (magic)
	    {
		case 'c':
		{
		    System.out.println("comando inizia per lettera c");

		    ret = compare();

		}
		    break;

		case 'd':
		{
		    System.out.println("comando inizia per lettera d");

		    ret = compare();

		}
		    break;

		case 'g':
		{
		    System.out.println("comando inizia per lettera g");

		    ret = compare();

		}
		    break;

		case 'p':
		{
		    System.out.println("comando inizia per lettera p");

		    ret = compare();

		}
		    break;

		default:
		{
		    System.out.print("operazione non riconosciuta");
		    ret = -1;
		}
		    break;

	    }
	    if (ret < 0)
	    {
		// se l'operazione non è riconosciuta viene ritornata una lista vuota, cioè 0 elementi
		return null;
	    }
	    else
	    {
		return this.tokens;
	    }

	}

    }

}
